perm filename NEW[CLS,LSP]2 blob
sn#849843 filedate 1987-11-25 generic text, type C, neo UTF8
COMMENT ā VALID 00002 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 ā24-Nov-87 2121 Gregor.pa@Xerox.COM Review material
C00018 ENDMK
Cā;
ā24-Nov-87 2121 Gregor.pa@Xerox.COM Review material
Received: from XEROX.COM by SAIL.STANFORD.EDU with TCP; 24 Nov 87 21:21:11 PST
Received: from Semillon.ms by ArpaGateway.ms ; 24 NOV 87 21:20:54 PST
Date: Tue, 24 Nov 87 21:20 PST
From: Gregor.pa@Xerox.COM
Subject: Review material
To: Dick Gabriel <RPG@SAIL.Stanford.EDU>
In-Reply-To: The message of 23 Nov 87 10:36 PST from Dick Gabriel
<RPG@SAIL.Stanford.EDU>
Message-ID: <871124212003.0.GREGOR@SPIFF.parc.xerox.com>
Line-fold: no
Date: 23 Nov 87 10:36 PST
From: Dick Gabriel <RPG@SAIL.Stanford.EDU>
I put together a first attempt of a description of meta-objects for
chapter 1 along with a redo of the meta-objects section. I'm not
entirely sure that the result is clear or accurate. It appears at the
end of this message. Also, could you review the chapter 1 sections on
change-class and class redefinition? I attempted a simplifying rewrite
and found the original (written by Moon) to be ambiguous. Thanks.
-rpg-
\beginSection{Meta-Objects}
The implementation of the \OS\ manipulates metaclasses and invokes
generic functions. The meta-object protocol specifies a set of generic
functions defined by methods on objects; the behavior of those generic
functions defines the behavior of the \OS. The generic functions and
the objects on which their methods are specialized are called {\bit
meta-objects}. Programming at the meta-object protocol level involves
defining new objects along with methods specialized on them for
generic functions specified to be in the meta-object protocol.
Perhaps:
"The implementation of the \OS\ manipulates classes, methods and generic
functions. The meta-object protocol specifies a set of generic
functions defined by methods on classes; the behavior of those generic
functions defines the behavior of the \OS. The instances of the classes
on which those methods are defined are called meta-objects. Programming
at the meta-object protocol level involves defining new classes of
metaobjects along with methods specialized on these classes for generic
functions specified to be in the meta-object protocol."
It still doesn't read comfortably, but it is more accurate.
Specifically:
- classes methods and generic functions are the datastructure the
implementation manipulates. They are the metaobjects.
- I prefer to use the terminology methods defined on classes not
methods defined on objects.
- a couple of other related nits in the 3rd and 4th sentences.
\beginsubSection{Metaclasses}
The {\bit metaclass\/} of an object is the class of its class. The
metaclass determines the representation of instances of its instances and
the forms of inheritance used by its instances for slot descriptions and
method inheritance. The metaclass mechanism can be used to provide
particular forms of optimization or to tailor the \CLOS\ for particular
uses. The protocol for defining metaclasses is discussed in the chapter,
``The \CLOS\ Meta-Object Protocol.''
\endsubSection%{Metaclasses}
\beginsubSection{Standard Metaclasses}
The \CLOS\ provides a number of predefined metaclasses. These include the
following: {\bf standard-class}, {\bf built-in-class}, and {\bf
structure-class}.
\beginlist
\item{\bull}
The class {\bf standard-class} is the default class of classes defined
by {\bf defclass}.
\item{\bull} The class {\bf built-in-class} is the class whose
instances are classes that have special implementations with
restricted capabilities. All classes that correspond to the standard
Common Lisp types specified in {\it Common Lisp: The Language\/}
are potentially instances of {\bf built-in-class}.
The predefined Common Lisp type specifiers that are required to have
corresponding classes are listed in Figure~1-1. It is implementation
dependent whether each of these classes is actually a built-in class.
\item{\bull}
All classes defined by means of {\bf defstruct} are instances of
{\bf structure-class}.
\endlist
\endsubSection%{Standard Metaclasses}
\beginsubSection{Standard Meta-objects}
The class {\bf standard-object} and instances of the classes {\bf
standard-method} and {\bf standard-generic-function} are standard
meta-objects.
Hmm, what is 'standard metaobject' supposed to convey here. That it is
in the standard? That it is of the standard kind? This term seems too
confusing to me since it might be desirable to have it mean one or the
other.
{\bf standard-object}.
\beginlist
\item{\bull}
The class {\bf standard-method} is the default class of methods
defined by {\bf defmethod}.
the method defining forms no?
\item{\bull}
The class {\bf standard-generic-function} is the default class of
generic functions defined by the method-defining forms {\bf defmethod},
{\bf defgeneric}, {\bf generic-function}, {\bf generic-flet},
{\bf generic-labels}, and {\bf with-added-methods}.
\item{\bull} The class named {\bf standard-object} is an instance of
the class {\bf standard-class} and is a superclass of every class that
is an instance of {\bf standard-class} except itself.
\endlist
\endsubSection%{Standard Meta-objects}
\endSection%{Meta-Objects}
All in all this looks good except for the comments about the first
paragraph.
I understand that it is real easy to get confused about this stuff. To
help you get confused, here is a twister that got me for a long time:
(But warning, do not think about it when driving or mowing the lawn or
anything like that).
The objects which the CLOS system itself manipulates are classes,
methods and generic functions. We call these metaobjects because they
are the objects the metacircular "evaluator" uses to run the language.
The CLOS system is defined by generic functions which are defined by
methods defined on the classes of the metaobjects.
What are the generic functions and methods which make up the definition
of the system themselves?
meta-meta-objects I guess.
Note that I put evaluator in quotes. That's because in some sense
evaluator isn't such a good word. Because the damn thing runs compiled
code and has all sorts of mechanisms for controlling compilation and
optimization. We are now using the word CLOS kernel to talk about the
thing that we have previously called the metacircular evaluator. I
guess the generic term for it would be 'metacircular kernel'. We think
the term kernel captures the fact that it comprises and evaluator,
compiler support and run-time support.
Sorry it took so long to get back about this.
The mop spec is looking better. I plan to work all weekend and let you
all see whatever we have on Monday, whether I am real happy with it or
not.
-------